﻿Imports Biz
Imports DAL


''' <summary>
''' Clase de gestión de lógica de negocio para la entidad Solicitud
''' </summary>
''' <remarks></remarks>
Public Class GestorSolicitud

    Private Shared _instance As GestorSolicitud
    Private Shared m_semaforo As New Object

    Private _DALSolicitud As DALSolicitud

    ''' <summary>
    ''' Obtiene un objeto Solicitud.
    ''' </summary>
    ''' <param name="oSolicitud">Objeto Solicitud con la propiedad Dep_Codigo seteada
    ''' con el valor del Solicitud a buscar.</param>
    ''' <returns>Objeto cSolicitud con datos obtenidos desde la base de datos.</returns>
    ''' <remarks></remarks>
    Public Function Buscar(ByVal oSolicitud As cSolicitud) As cSolicitud

        Return _DALSolicitud.Sel(oSolicitud)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para consultar la lista de Solicitudes
    ''' </summary>
    ''' <returns>Colección de objetos de tipo cSolicitud</returns>
    ''' <remarks></remarks>
    Public Function ConsultarPorBusqueda(oBusqueda As cBusqueda) As Collection

        Return _DALSolicitud.SelectAllPorBusqueda(oBusqueda)

    End Function

    ''' <summary>
    ''' Da de alta un nuevo Solicitud.
    ''' </summary>
    ''' <param name="oSolicitud">Objeto cSolicitud con los datos del Solicitud a dar
    '''  de alta.</param>
    ''' <returns>True o False indicando el exito de la operación.</returns>
    ''' <remarks></remarks>
    Public Function Ingresar(ByVal oSolicitud As cSolicitud) As Boolean
        Dim oPostulante As cPostulante = New cPostulante
        Dim bResultado As Boolean

        oPostulante.oTipo_Documento.TDoc_Codigo = oSolicitud.oPostulante.oTipo_Documento.TDoc_Codigo
        oPostulante.Postu_NroDoc = oSolicitud.oPostulante.Postu_NroDoc

        oPostulante = GestorPostulante.Instance.Buscar(oPostulante)

        If oPostulante Is Nothing Then
            bResultado = GestorPostulante.Instance.Ingresar(oSolicitud.oPostulante)
        Else
            bResultado = GestorPostulante.Instance.Editar(oSolicitud.oPostulante)
        End If

        If bResultado Then
            bResultado = _DALSolicitud.Insert(oSolicitud)
        End If

        Return bResultado
    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para eliminar una Solicitud
    ''' </summary>
    ''' <param name="oSolicitud">Objeto de tipo cSolicitud con la identificación del registro a eliminar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Eliminar(ByVal oSolicitud As cSolicitud) As Boolean
        Return _DALSolicitud.Delete(oSolicitud)
    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para actualizar una Solicitud
    ''' </summary>
    ''' <param name="oSolicitud">Objeto de tipo cSolicitud con los datos del registro que se va a actualizar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Editar(ByVal oSolicitud As cSolicitud) As Boolean
        Return _DALSolicitud.Update(oSolicitud)
    End Function

    ''' <summary>
    ''' Método estático Instance para exponer una única instancia de la clase GestorSolicitud
    ''' </summary>
    ''' <returns>Unica instancia de la clase GestorSolicitud</returns>
    ''' <remarks></remarks>
    Public Shared Function Instance() As GestorSolicitud
        If _instance Is Nothing Then
            SyncLock (m_semaforo)
                If _instance Is Nothing Then
                    _instance = New GestorSolicitud
                End If
            End SyncLock
        End If

        Return _instance
    End Function

    Private Sub New()
        _DALSolicitud = DALSolicitud.Instance
    End Sub

End Class
